package com.simoniu.scalademo

import org.apache.spark.{SparkConf, SparkContext}

/**
 * 需求：repartition的使用
 * Created by simoniu
 */

object RepartitionScalaDemo {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf()
    conf.setAppName("RepartitionOpScala")
      .setMaster("local")
    val sc = new SparkContext(conf)

    //设置分区数量为2
    val dataRDD = sc.parallelize(Array(1, 2, 3, 4, 5, 6, 7, 8, 9), 2)

    //重新设置RDD的分区数量为3，这个操作会产生shuffle
    //也可以解决RDD中数据倾斜的问题
    dataRDD.repartition(3)
      .foreachPartition(it => {
        println("=========")
        it.foreach(println(_))
      })

    //通过repartition可以控制输出数据产生的文件个数
    dataRDD.saveAsTextFile("hdfs://master:9000/repartition-demo")
    dataRDD.repartition(1).saveAsTextFile("hdfs://master:9000/repartition-demo2")

    sc.stop()
  }
}
